#include "usart1_driver.h"
#include "gd32f4xx.h"
#include "systick.h"
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
//
//extern void onUsart1ReceiveData();
void usart1_driver_tx_config(void)
{

//    // U0T:usart0_tx 对应PA9引脚
//    // 串口外设时钟使能
//    rcu_periph_clock_enable(RCU_USART1);
//    // 引脚外设时钟使能
//    rcu_periph_clock_enable(RCU_GPIOA);

//    // 输出复用
//    //  引脚复用功能配置
//    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_1000);
//    // af7对应usart0_tx
//    gpio_af_set(GPIOA, GPIO_AF_7, GPIO_PIN_10000);
//    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1000);

//    // 串口配置
//    // 复位
//    usart_deinit(USART1);
//    // 比特率
//    usart_baudrate_set(USART1, 115200);
//    // 校验位
//    usart_parity_config(USART1, USART_PM_NONE);
//    // 字宽:8
//    usart_word_length_set(USART1, USART_WL_8BIT);
//    // 停止位:1bit
//    usart_stop_bit_set(USART1, USART_STB_1BIT);
//    // 先发送低位,后发送高位
//    usart_data_first_config(USART1, USART_MSBF_LSB);

//    // 打开发送功能
//    usart_transmit_config(USART1, USART_TRANSMIT_ENABLE);
//    // 打开串口总开关
//    usart_enable(USART1);
}

/**
 * 串口接收
 */
void usart1_driver_rx_config(void)
{
//    // 串口接收:使用PA10引脚
//    // 设置复用输出模式
//    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_10);
//    // 使用引脚pa10的复用功能usart0_rx的串口接收
//    gpio_af_set(GPIOA, GPIO_AF_7, GPIO_PIN_10);

//    // 配置串口接收
//    usart_receive_config(USART1, USART_RECEIVE_ENABLE);
//    // 开启中断
//    nvic_irq_enable(USART1_IRQn, 2, 2);
//    // 开启rbne中断接收
//    usart_interrupt_enable(USART1, USART_INT_RBNE);
//    // 开启idle中断接收
//    usart_interrupt_enable(USART1, USART_INT_IDLE);
//    // 开启usart0总开关
//    usart_enable(USART1);
}



// 实现usart0的中断函数
void USART1_IRQHandler(void)
{
    // 监听brne与idle两个中断
    if (SET == usart_interrupt_flag_get(USART1, USART_INT_FLAG_RBNE))
    {
        // 清除标记
        usart_interrupt_flag_clear(USART1, USART_INT_FLAG_RBNE);
       
    }

    // 监听idle中断

    if (SET == usart_interrupt_flag_get(USART1, USART_INT_FLAG_IDLE))
    {
        // 清除标记,与其他不同,需要通过读取,清除标记
        usart_data_receive(USART1);
        
    }
}



void usart1_driver_tx_test()
{
    
}

void usart1_driver_rx_test(void)
{
}
